package org.jeecg.modules.bpm.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.bpm.dto.ActHiActinstDTO;
import org.jeecg.modules.bpm.dto.ActRuTaskDTO;
import org.jeecg.modules.bpm.dto.TaskDTO;
import org.jeecg.modules.bpm.dto.UserAgentDTO;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

public interface ActivitiMapper extends BaseMapper {
	
	
	/**
	 * 根据历史执行ID，查询变量内容
	 * @param EXECUTION_ID_
	 * @param NAME_
	 * @return
	 */
	@Select("select TEXT_ from act_hi_varinst where NAME_= #{name} and EXECUTION_ID_= #{proid}")
	String getHisVarinst(@Param("name")String name,@Param("proid") String proid);
	
	/**
	 * 获取流程的启动和结束时间
	 * @param name
	 * @param proid
	 * @return
	 */
	/*
	 * @Select("select * from act_hi_actinst where EXECUTION_ID_=#{proid} and ACT_TYPE_ in ('startEvent','endEvent')"
	 * )
	 * 
	 * @ResultType(Map.class) List<Map<String,Object>> getActHiActinst(String
	 * proid);
	 */
	 
	 /**
	  * 指定下一步操作人
	  * @param proInsId
	  * @param taskDefKey
	  * @param nextUser
	  */
	 @Select("select ID_ from act_ru_task where PROC_INST_ID_= #{proInsId} and TASK_DEF_KEY_= #{taskDefKey} order by CREATE_TIME_")
	 List<String> getTaskIdByProins(@Param("proInsId")String proInsId,@Param("taskDefKey")String taskDefKey);
	 
	 
	 List<TaskDTO>  getHistoryTasks(Page page,@Param("userName") String userName,
			 @Param("processDefinitionId") String processDefinitionId,
			 @Param("processDefinitionName") String processDefinitionName);
	 
	 
	 List<TaskDTO>  getAllHistoryTasks(Page page,@Param("processDefinitionId") String processDefinitionId,
			 @Param("processDefinitionName") String processDefinitionName);
	 
	 
	 List<TaskDTO>  getAllCcHistoryTasks(Page page,@Param("ccUserName") String ccUserName,
			 @Param("processDefinitionId") String processDefinitionId,
			 @Param("processDefinitionName") String processDefinitionName);
	 
	 /**
	  *  查询流程的历史任务节点
	  * @param proceInsId
	  * @return
	  */
	 //@Select("select DISTINCT TASK_DEF_KEY_,NAME_ from act_hi_taskinst where PROC_INST_ID_= #{proceInsId} and DELETE_REASON_ ='completed'")
	 @Select("select DISTINCT TASK_DEF_KEY_,NAME_ from act_hi_taskinst where PROC_INST_ID_= #{proceInsId}  AND END_TIME_ is not null")
	 List<Map<String,Object>> getHistTaskNodeList(@Param("proceInsId") String proceInsId);
	 
	 /**
	  * 获取流程的启动和结束时间
	 * @param proceInsId
	 * @return
	 */
	List<ActHiActinstDTO> getActHiActinstStartAndEnd(@Param("proceInsId") String proceInsId);
	
	 
	 /**
	  * 根据流程实例ID，获取流程的发起人
	 * @param userId
	 * @return
	 */
	@Select("select START_USER_ID_  from act_hi_procinst where ID_ = #{proceInsId}")
	String getProcessStartUserId(@Param("proceInsId") String proceInsId);
	
	/**
	  * 根据流程实例ID，获取结束节点处理人
	 * @param userId
	 * @return
	 */
	@Select("select ASSIGNEE_ from act_hi_taskinst where PROC_INST_ID_ = #{proceInsId} order by END_TIME_ DESC")
	List<Map<String,Object>> getProcessEndUserId(@Param("proceInsId") String proceInsId);
	
	List<UserAgentDTO>  getUserAgent(@Param("currDate") Date currDate);

//
//	 
//	 /**
//	  * 根据流程ID，获取流程的发起人
//	  * @param ID_  流程ID
//	  */
//	 @Select("select START_USER_ID_  from act_hi_procinst where id_ = :id")
//	 String getProcessStartUserId(String id);
//	 
//	 /**
//	  * 根据流程ID，流程最后一个处理人
//	  * @param ID_  流程ID
//	  */
//	 @Select("select ASSIGNEE_ from act_hi_taskinst where proc_inst_id_ = :id order by end_time_ desc")
//	 List<Map<String,Object>> getProcessEndUserId(String id,int page, int rows);
//	 
//	 
//	 /**
//	  * 获取流程发起节点的表单
//	  * @param processid  流程ID
//	  */
//	 @Select("select modelandview from t_p_processnode where processid = :processid and processnodecode = 'start'")
//	 String getProcessStartNodeView(String processid);
//	 
//	 
//	 /**
//	  * 获取流程发起节点的表单
//	  * @param processid  流程ID
//	  */
//	 @Select("select modelandview_mobile from t_p_processnode where processid = :processid and processnodecode = 'start'")
//	 String getProcessStartNodeViewMobile(String processid);
//	 
//	 /**
//	  * 获取流程发起节点的表单
//	  * @param processid  流程ID
//	  */
//	 @Select("select id from t_p_process where processkey = :processkey ")
//	 String getProcessidByProcesskey(String processkey);

	/**
	 * 获取超时任务节点
	 * @return
	 */
	List<ActRuTaskDTO> getTimeoutTask();
}
